package info.hexin.redis.distributedlock;

import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * Created by Administrator on 2016/1/29.
 */
public interface RedisDistributedLockService {
    /**
     * 获取锁  如果锁可用   立即返回true，  否则返回false
     *
     * @param billIdentify
     * @return
     * @see
     */

    public boolean tryLock(String billIdentify);

    /**
     * 锁在给定的等待时间内空闲，则获取锁成功 返回true， 否则返回false
     *
     * @param billIdentify
     * @param timeout
     * @param unit
     * @return
     */
    public boolean tryLock(String billIdentify, long timeout, TimeUnit unit);

    /**
     * 如果锁空闲立即返回   获取失败 一直等待
     *
     * @param billIdentify
     */
    public void lock(String billIdentify);

    /**
     * 释放锁
     *
     * @param billIdentify
     */
    public void unLock(String billIdentify);

    /**
     * 批量获取锁  如果全部获取   立即返回true, 部分获取失败 返回false
     *
     * @param billIdentifyList
     * @return
     * @date 2013-7-22 下午10:27:44
     */
    public boolean tryLock(List<String> billIdentifyList);

    /**
     * 锁在给定的等待时间内空闲，则获取锁成功 返回true， 否则返回false
     *
     * @param billIdentifyList
     * @param timeout
     * @param unit
     * @return
     */
    public boolean tryLock(List<String> billIdentifyList, long timeout, TimeUnit unit);

    /**
     * 批量释放锁
     *
     * @param billIdentifyList
     */
    public void unLock(List<String> billIdentifyList);
}
